package org.example.Test;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Test7 {
    public static void main(String[] args) {
        // 创建一个ExecutorService，这里以单线程的ExecutorService为例
        ExecutorService executor = Executors.newSingleThreadExecutor();

        // 提交一个Callable任务给ExecutorService执行
        Callable<String> task = () -> {
            // 模拟一个耗时任务
            try {
                TimeUnit.SECONDS.sleep(10); // 假设这个任务需要10秒来完成
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt(); // 恢复中断状态
                return "Interrupted";
            }
            return "Completed";
        };

        // 提交任务并获取Future对象
        Future<String> future = executor.submit(task);

        try {
            // 等待任务完成，但最多等待5秒
            String result = future.get(5, TimeUnit.SECONDS);
            System.out.println("Result: " + result);
        } catch (TimeoutException e) {
            // 如果任务在5秒内没有完成，会抛出TimeoutException
            System.out.println("Task timed out");
            // 可以选择取消任务（如果支持）
            future.cancel(true); // 尝试取消任务，如果任务正在运行，且支持中断，则会尝试中断它
        } catch (InterruptedException | ExecutionException e) {
            // 处理其他异常
            e.printStackTrace();
        } finally {
            // 关闭ExecutorService
            executor.shutdown();
        }
    }
}
